home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib13.dsk / CH.A.M.P. (REPORT MOD).bas < prev    next >
BASIC Source File  |  2023-02-26  |  16KB  |  408 lines

  1. 1  REM  ***************************
  2. 2  REM  *      CH.A.M.P.          *
  3. 3  REM  * CHECKBOOK ADV MGMT PROG *
  4. 4  REM  * BY JOHN T. YANTIS AND   *
  5. 5  REM  *    STEVE ALEX           *
  6. 6  REM  * COPYRIGHT (C) 1980 BY   *
  7. 7  REM  *   MICRO-SPARC, INC.     *
  8. 8  REM  *   LINCOLN, MA 01773     *
  9. 9  REM  ***************************
  10. 10 D$ =  CHR$(4):F$ = "CHECK"
  11. 20  GOTO 8000
  12. 100  REM  ** PRINT FIELD **
  13. 110  HTAB T%(I,0): VTAB T%(I,1)
  14. 120  PRINT O$(I,S);:V =  PEEK(37) +1
  15. 130  IF  LEN(O$(I,S)) = T%(I,2)  THEN 190
  16. 140  IF EDIT = 21  THEN 170
  17. 150  IF  LEN(O$(I,S)) = 0  THEN  HTAB T%(I,0): VTAB T%(I,1): GOTO 180
  18. 160  PRINT  LEFT$(B$,(T%(I,2) - LEN(O$(I,S))))
  19. 170  HTAB T%(I,0) + LEN(O$(I,S)): VTAB V
  20. 180  RETURN 
  21. 190  POP : GOTO 540: REM 
  22. 200  REM  ** ADD **
  23. 210  GOSUB 6000
  24. 215 Z1 = 0: REM  WE CAN BUMP SVC CHG OR DEP #
  25. 220  IF Z = 1  THEN  VTAB 23: HTAB 1: PRINT "CTRL Q TO QUIT  "
  26. 225  FOR I = 1 TO N
  27. 230 B$ = P$
  28. 240  GOSUB 5000: REM  USER CONTROL
  29. 250  GOSUB 100
  30. 260  GET A$:EDIT =  ASC(A$)
  31. 270  IF EDIT = 2  THEN 200
  32. 280  IF EDIT = 8  THEN 380
  33. 290  IF EDIT = 13  THEN 540
  34. 295  IF EDIT = 17  AND Z = 1  THEN 999
  35. 300  IF EDIT = 21  THEN 420
  36. 310  IF EDIT = 27  THEN 480
  37. 320  IF EDIT = 34  THEN A$ = "'"
  38. 330  IF EDIT = 44  THEN A$ = ";"
  39. 340  IF EDIT = 58  THEN A$ = ";"
  40. 350  IF EDIT = 62  THEN 450
  41. 360 O$(I,S) = O$(I,S) +A$
  42. 370  GOTO 250
  43. 380  REM  ** BS (EDIT=8)**
  44. 390  IF  LEN(O$(I,S)) <2  THEN O$(I,S) = "": GOTO 250
  45. 400 O$(I,S) =  LEFT$(O$(I,S), LEN(O$(I,S)) -1)
  46. 410  GOTO 250
  47. 420  REM  ** FS (EDIT=21)**
  48. 430 O$(I,S) = O$(I,S) + MID$ (O$(I,  NOT S), LEN(O$(I,S)) +1,1)
  49. 440  GOTO 250
  50. 450  REM  ** > (COPY EDIT=62)**
  51. 460 O$(I,S) = O$(I,S) + MID$ (O$(I,  NOT S),1 + LEN(O$(I,S)), LEN(O$(I,  NOT S)))
  52. 470  GOSUB 100: GOTO 540
  53. 480  REM  ** ESC (EDIT=27)*
  54. 490 I = I -1: IF I = 0  THEN I = 1
  55. 500  IF  LEN(O$(I,S)) <T%(I,2)  THEN 250
  56. 510  HTAB T%(I,0): VTAB T%(I,1): PRINT O$(I,S);
  57. 515  IF  LEN(O$(I,S)) = 1  THEN O$(I,S) = "": GOTO 530
  58. 520 O$(I,S) =  LEFT$(O$(I,S), LEN(O$(I,S)) -1)
  59. 530  HTAB  PEEK(36): GOTO 260
  60. 540  REM  ** CR (EDIT=13)**
  61. 550  IF  LEN(O$(I,S)) = 0  THEN  HTAB T%(I,0): VTAB T%(I,1): PRINT  LEFT$(P$,T%(I,2))
  62. 560  IF  LEN(O$(I,S)) <T%(I,2)  THEN B$ = Z$: GOSUB 100:B$ = P$
  63. 570  IF I = N  THEN  GOSUB 700
  64. 580  NEXT 
  65. 590  REM  * EVALUATE*
  66. 600  HTAB 1: VTAB 22: CALL  -958: IF SW  THEN  PRINT " MAKE CORRECTIONS ": GOTO 650
  67. 610  GOSUB 7000:Z1 = 0: REM  OVE  COUNTER LOCK
  68. 620  IF Z = 2  THEN  GOSUB 7300: GOTO 640
  69. 630  GOSUB 7100: GOSUB 7300:CHG = 1: GOSUB 7400:PNT = PNT -1
  70. 640  GOSUB 7500:CHG = 0:SW = 0: GOSUB 900
  71. 645 T1 = 0: IF AC  AND  VAL(O$(1,S)) >0  THEN AC =  VAL(O$(1,S)) +1
  72. 650 S =   NOT S
  73. 660  FOR I = 1 TO N:O$(I,S) = "": NEXT 
  74. 670  IF SW  THEN SW = 0: GOTO 220
  75. 680  ON Z GOTO 220,1000,1000
  76. 700  REM  **VERIFY**
  77. 710  FOR Q = 1 TO N
  78. 720  IF T$(Q) = "$"  OR T$(Q) = "N"  THEN  GOSUB 780
  79. 730  NEXT 
  80. 735  GOSUB 5500: REM  CHECK
  81. 740  VTAB 22: HTAB 1: CALL  -958: PRINT "PRESS SPACE BAR TO STORE RECORD.": PRINT "ANY OTHER KEY TO MAKE CORRECTIONS. ";
  82. 750  GET A$
  83. 760  IF A$ < >" "  THEN SW = 1
  84. 765  IF SW  THEN AMT = ( VAL(O$(5,S))) * -1: GOSUB 5520
  85. 770 A$ = "": VTAB 22: PRINT A$: RETURN 
  86. 780  REM  ** NUMERIC CHECKS**
  87. 790  IF  VAL(O$(Q,S)) < >0  OR O$(Q,S) = ""  OR O$(Q,S) = " "  OR  LEFT$(O$(Q,S),1) = "0"  THEN 830
  88. 800  VTAB 22: HTAB 1: CALL  -958: PRINT N$(Q)" MUST BE NUMERIC, REENTER."
  89. 810 O$(Q,S) = "":I = Q -1
  90. 820  POP : RETURN 
  91. 830 A$ = O$(Q,S):O$(Q,S) =  STR$( VAL(O$(Q,S)))
  92. 840  IF T$(Q) < >"$"  THEN 880
  93. 850  FOR J = 1 TO  LEN(O$(Q,S)): IF  MID$ (O$(Q,S),J,1) = "."  THEN 870
  94. 860  NEXT :O$(Q,S) = O$(Q,S) +".00": GOTO 880
  95. 870 O$(Q,S) = O$(Q,S) +"00":O$(Q,S) =  LEFT$(O$(Q,S),J +2)
  96. 880  IF  LEN(O$(Q,S)) >T%(Q,2)  THEN O$(Q,S) = A$
  97. 885  HTAB T%(Q,0): VTAB T%(Q,1): PRINT  LEFT$(Z$,T%(Q,2));: HTAB T%(Q,0): VTAB T%(Q,1): PRINT O$(Q,S);
  98. 890  RETURN 
  99. 900  REM  *UPDATE INDEXES*
  100. 910 B% = (PNT -1)/239:C = PNT -B% *239
  101. 920  FOR K = 1 TO N
  102. 930 J = T%(K,3): IF J = 0  THEN 970
  103. 940  IF C >1  THEN Z1$ =  LEFT$(I$(J,B%),C -1)
  104. 950  IF C <239  THEN Z2$ =  MID$ (I$(J,B%),C +1)
  105. 960 I$(J,B%) = Z1$ + LEFT$(O$(K,S),1) +Z2$
  106. 970 Z1$ = "":Z2$ = "": NEXT 
  107. 975  GOSUB 6600: REM  DO RPTING INDEX ADD/UPDATE
  108. 980  RETURN 
  109. 999 A$ = "": PRINT A$: GOSUB 7500: GOSUB 7700: GOSUB 7900: GOTO 9000
  110. 1000  REM  * CHANGE *
  111. 1010  GOSUB 7000: GOSUB 7100:X = PNT
  112. 1015  IF X = 1  THEN 9000
  113. 1020  HOME : HTAB 17: PRINT M$
  114. 1030  PRINT : PRINT "WHAT TYPE OF SEARCH?": PRINT "R(ECORD NUMBER, M(ATCH ,Q(UIT ";: GET A$: PRINT A$
  115. 1040 SQ = 0
  116. 1050  IF A$ = "R"  THEN 1300
  117. 1060  IF A$ = "Q"  AND Z = 3  THEN 9000
  118. 1070  IF A$ = "Q"  THEN 999
  119. 1080  IF A$ < >"M"  THEN 1020
  120. 1090  VTAB 3: CALL  -958
  121. 1100  FOR I = 1 TO N: PRINT I"  ";: IF T%(I,3) >0  THEN  INVERSE 
  122. 1110  PRINT N$(I): NORMAL : NEXT 
  123. 1120  PRINT : INPUT "ENTER NUMBER OF SEARCH FIELD ";A
  124. 1130  IF A <1  OR A >N  THEN 1090
  125. 1140  PRINT : PRINT "SEARCH FOR "N$(A);: INPUT " = ";A$
  126. 1150  IF  LEN(A$) = 0  THEN A$ =  LEFT$(Z$,T%(A,2))
  127. 1160  IF  LEN(A$) >T%(A,2)  THEN A$ =  LEFT$(A$,T%(A,2))
  128. 1170  IF  ASC(A$) = 1  THEN A$ =  RIGHT$(A$, LEN(A$) -1)
  129. 1180 I = 1: GOSUB 6000
  130. 1190  IF I = X  THEN 1500
  131. 1200  IF T%(A,3) = 0  THEN 1230
  132. 1210 B% = (I -1)/239:C = I -B% *239
  133. 1220  IF  MID$ (I$(T%(A,3),B%),C,1) < > LEFT$(A$,1)  THEN 1260
  134. 1230 PNT = I: GOSUB 7200: HTAB 10: VTAB 1: PRINT "RECORD NUMBER ";I
  135. 1240 O$(A,  NOT S) =  LEFT$(O$(A,S), LEN(A$))
  136. 1250  IF O$(A,  NOT S) = A$  THEN 2000
  137. 1260 I = I +1: GOTO 1190
  138. 1300  VTAB 3: CALL  -958
  139. 1310  VTAB 2: PRINT : CALL  -868: INPUT "ENTER RECORD NUMBER ";A
  140. 1320  IF A <1  OR A >X -1  THEN  PRINT : PRINT "ONLY "X -1" RECORDS IN FILE, REENTER": GOTO 1310
  141. 1330 SQ = 1:PNT = A: GOSUB 7200
  142. 1340  GOSUB 6000: GOTO 2000
  143. 1500  HOME : VTAB 3: IF PST  THEN  PRINT "POSTING COMPLETE ": PRINT "PRESS ANY KEY FOR MENU ";: GET A$: PRINT A$: GOTO 999
  144. 1510  VTAB 3: PRINT "END OF FILE REACHED  ": GOTO 1030
  145. 2000  REM  *FOUND*
  146. 2010  ON Z GOTO 2100,2200,2300
  147. 2100  PRINT  CHR$(7)"ERR": END 
  148. 2200  GOSUB 6300
  149. 2210  VTAB 1: HTAB 10: PRINT "RECORD NUMBER "PNT
  150. 2220  IF PST  THEN 6500
  151. 2230  HTAB 1: VTAB 22: CALL  -958: PRINT "IS THIS THE RECORD YOU WISH TO CHANGE   Y(ES, NO ";: GET Q$
  152. 2240  IF Q$ = "Y"  THEN SW = 1:Q$ = "": PRINT Q$: GOTO 2500
  153. 2245 Q$ = "": PRINT Q$
  154. 2250  IF SQ  THEN 1500
  155. 2260  GOTO 1260
  156. 2300  GOSUB 6300
  157. 2310  VTAB 1: HTAB 10: PRINT "RECORD NUMBER "PNT
  158. 2315  HTAB 1: VTAB 22
  159. 2320  IF SQ  THEN  PRINT "PRESS ANY KEY TO CONTINUE ";: GET Q$: PRINT Q$: GOTO 1020
  160. 2330  HTAB 1: VTAB 22: CALL  -958: PRINT "CONTINUE SEARCH  Y(ES, N(O ";: GET Q$: PRINT Q$
  161. 2340  IF Q$ = "N"  THEN 1020
  162. 2350  GOTO 1260
  163. 2500  REM  JOIN ADD
  164. 2510  IF O$(6,S) = "O"  THEN 2540
  165. 2520  IF  LEFT$(O$(1,S),1) = "D"  THEN T1 = 3: GOTO 2560
  166. 2530 T1 = 2: GOTO 2560
  167. 2540  IF  LEFT$(O$(1,S),1) = "D"  THEN T1 = 1: GOTO 2560
  168. 2550 T1 = 0
  169. 2560 AMT =  VAL(O$(5,S)) * -1: GOSUB 5520:T1 = 0: IF PST  THEN  RETURN 
  170. 2570  GOTO 590
  171. 4000  GOSUB 7000: GOSUB 7100
  172. 4010 PST = 1
  173. 4020 OC = 0:PC = 0:OD = 0:PD = 0:BB = 0:CB = 0:DN = 0:CN = 0
  174. 4030 X = PNT: FOR I = 1 TO X -1
  175. 4040 PNT = I: GOSUB 7200: GOSUB 2500
  176. 4050  IF  LEFT$(O$(1,S),1) = "D"  THEN DN = DN +1
  177. 4060  IF  LEFT$(O$(1,S),1) = "S"  THEN CN = CN +1
  178. 4070  NEXT :PST = 0
  179. 4080 OC = OC * -1:OD = OD * -1:PD = PD * -1:PC = PC * -1:BB = BB * -1:CB = CB * -1
  180. 4090  GOTO 999
  181. 5000  REM  *USER CONTROL START*
  182. 5010  IF I = 1  AND AC  THEN O$(1,  NOT S) =  STR$(AC): HTAB T%(1,0): VTAB T%(1,1): PRINT AC: RETURN 
  183. 5020  IF I = 2  AND  VAL(O$(1,S)) = 0  THEN  GOSUB 5050: RETURN 
  184. 5030  IF I = 7  THEN  GOSUB 5170
  185. 5040  RETURN 
  186. 5050  IF  LEFT$(O$(1,S),1) = "D"  THEN 5080
  187. 5060  IF  LEFT$(O$(1,S),1) = "S"  THEN 5110
  188. 5070 I = 1:O$(I,S) = "": RETURN : REM  NOT #,S OR D
  189. 5080 T1 = 1: IF Z = 2  THEN  RETURN 
  190. 5090  IF   NOT Z1  THEN DN = DN +1
  191. 5100 O$(1,S) = "D" + STR$(DN):O$(2,S) = "DEPOSIT  ": GOTO 5130
  192. 5110 T1 = 2: IF Z = 2  THEN  RETURN 
  193. 5120  IF   NOT Z1  THEN CN = CN +1
  194. 5125 O$(1,S) = "S" + STR$(CN):O$(2,S) = "SERVICE CHARGE "
  195. 5130  FOR I = 1 TO 2: HTAB T%(I,0): VTAB T%(I,1): PRINT O$(I,S);
  196. 5135 Z1 = 1: REM  NO MORE INC'S
  197. 5140  IF  LEN(O$(I,S)) <T%(I,2)  THEN  PRINT  LEFT$(Z$,T%(I,2) - LEN(O$(I,S)))
  198. 5150  NEXT 
  199. 5160 I = 3: RETURN 
  200. 5170  IF O$(6,S) = "O"  THEN 5200
  201. 5180  IF O$(6,S) = "P"  THEN 5220
  202. 5190 I = 6:O$(6,S) = "": REM  NOT O OR P
  203. 5200  IF T1 = 2  THEN T1 = 0
  204. 5210  RETURN 
  205. 5220  IF T1 = 1  THEN T1 = 3
  206. 5230  IF   NOT T1  THEN T1 = 2
  207. 5240  RETURN 
  208. 5500  REM  *USER CONTROL END*
  209. 5510 AMT =  VAL(O$(5,S))
  210. 5520  IF T1 = 0  THEN OC = OC +AMT:OC =  FN R(OC)
  211. 5530  IF T1 = 1  THEN OD = OD +AMT:OD =  FN R(OD)
  212. 5540  IF T1 = 2  THEN PC = PC +AMT:PC =  FN R(PC)
  213. 5550  IF T1 = 3  THEN PD = PD +AMT:PD =  FN R(PD)
  214. 5560 BB = PD -PC:BB =  FN R(BB)
  215. 5570 CB = BB +OD -OC:CB =  FN R(CB)
  216. 5580  VTAB 15: CALL  -958: PRINT : PRINT "BANK BALANCE = ";BB
  217. 5590  PRINT "CHECKBOOK BALANCE = ";CB: RETURN 
  218. 5620  PRINT : PRINT "ENTER STARTING CHECK NUMBER IF AUTO     NUMBERING DESIRED: (RETURN IF NOT)"
  219. 5630  PRINT : INPUT "CHECK NUMBER: ";A$: IF  VAL(A$) >0  THEN AC =  VAL(A$)
  220. 5640  RETURN 
  221. 5700  REM  *BALANCE*
  222. 5710  HOME : VTAB 5:H = 32
  223. 5720  PRINT "POSTED DEPOSITS";:PP = PD: GOSUB 5800
  224. 5730  PRINT "POSTED CHECKS";:PP = PC: GOSUB 5800
  225. 5740  PRINT "BANK BALANCE   ";:PP = BB: GOSUB 5800: PRINT 
  226. 5750  PRINT "OUTSTANDING DEPOSITS";:PP = OD: GOSUB 5800
  227. 5760  PRINT "OUTSTANDING CHECKS";:PP = OC: GOSUB 5800
  228. 5770  PRINT "CHECKBOOK BALANCE";:PP = CB: GOSUB 5800
  229. 5780  PRINT : PRINT "PRESS ANY KEY FOR MENU  ";: GET AN$: PRINT AN$
  230. 5790  GOTO 9000
  231. 5800  REM  *PRINT COLUMNS*
  232. 5810  REM  ENTER WITH H(HTAB) AN PP(WHAT YOU WANT PRINTED IN COLUMN)
  233. 5820  HTAB H: PRINT ".00";
  234. 5830 P1 =  ABS(PP):P2 =  INT(PP)
  235. 5840 P3 =  INT((PP -P2 +.005) *100)/100:PP = P2 +P3
  236. 5850 Z1 = P1 > = 1:Z2 = P1 > = 10:Z3 = P1 > = 100:Z4 = P1 > = 1000:Z5 = P1 > = 10000:Z6 = PP < = 0
  237. 5860 Z = Z1 +Z2 +Z3 +Z4 +Z5 +Z6: HTAB H -Z: PRINT PP
  238. 5870  RETURN 
  239. 6000  REM  **PRINT FRAME**
  240. 6010  HOME : PRINT L$M$R$
  241. 6020  FOR K = 1 TO N
  242. 6030  VTAB T%(K,1): HTAB T%(K,0) - LEN(N$(K)) -3: PRINT N$(K)" - ";
  243. 6040  VTAB T%(K,1): HTAB T%(K,0): PRINT  LEFT$(P$,T%(K,2))
  244. 6050  IF Z >1  THEN 6070
  245. 6060 O$(K,S) = ""
  246. 6070  NEXT : RETURN 
  247. 6100  REM  *ONERR*
  248. 6105  IF  PEEK(222) < >6  THEN  INVERSE : PRINT "ERROR #" PEEK(222)" IN LINE " PEEK(218) + PEEK(219) *256: NORMAL : END 
  249. 6110  GOSUB 7000:PNT = 1:CHG = 0: GOSUB 7400: GOSUB 7500
  250. 6120  GOTO 8125: REM  RESUME
  251. 6130  IF  ASC(A$) = 0  THEN A$ = "  ": RESUME 
  252. 6135  GOTO 6105
  253. 6300  REM  * PRINT DATA*
  254. 6310  FOR K = 1 TO N
  255. 6320  HTAB T%(K,0): VTAB T%(K,1): PRINT  LEFT$(Z$,T%(K,2))
  256. 6330  HTAB T%(K,0): VTAB T%(K,1): PRINT O$(K,S)
  257. 6340  NEXT : RETURN 
  258. 6500  REM  * POST *
  259. 6510  VTAB 22: HTAB 1: CALL  -958
  260. 6520  PRINT " P(OST, O(MIT, Q(UIT ";: GET AN$: PRINT AN$
  261. 6530  IF AN$ = "Q"  THEN 999
  262. 6540  IF AN$ = "O"  THEN 1260
  263. 6550  IF AN$ < >"P"  THEN 6500
  264. 6560  GOSUB 2500:O$(6,S) = "P"
  265. 6570  GOSUB 7300: GOSUB 900
  266. 6580 I = 2: GOSUB 5000: GOSUB 5170: GOSUB 5510
  267. 6590 I = PNT +1: GOTO 1190
  268. 6600  REM  ** BUILD/UPDATE RPTING INDEXES
  269. 6610  GOSUB 6800: GOSUB 6850:TR = IP -1
  270. 6615  IF PNT >TR +1  THEN  RETURN : REM  INDEXES MISSING, LET CHAMP-RPTING CATCH UP NEXT TIME IT'S RUN
  271. 6620 CK =  LEFT$(O$(1,S),1) < = "9": REM  A CHECK IF 1ST CHAR IS NUMERIC
  272. 6630  IF   NOT CK  THEN CK$ = "0" + LEFT$(O$(1,S),1) + RIGHT$("000" + STR$( VAL( MID$ (O$(1,S),2))),3)
  273. 6640  IF CK  THEN CK$ = "1" + RIGHT$("0000" + STR$( VAL(O$(1,S))),4)
  274. 6642  IF O$(7,S) = ""  THEN O$(7,S) = " "
  275. 6644  IF O$(8,S) = ""  THEN O$(8,S) = " "
  276. 6650 ID$ = CK$ +O$(7,S) +O$(8,S) + RIGHT$("00" +O$(3,S),2) + RIGHT$("00" +O$(4,S),2) +O$(6,S) + RIGHT$("0000" + STR$(PNT),4)
  277. 6660 IP = PNT: GOSUB 6900
  278. 6670  IF PNT < = TR  THEN  RETURN : REM  UPDATED EXISTING INDEX
  279. 6680 TR = PNT:IP = PNT +1: GOSUB 6950: REM  ADDED NEW INDEX
  280. 6690  RETURN 
  281. 6700  REM  ** RPTIDX ONERR RTN
  282. 6710  IF  PEEK(222) < >6  THEN  INVERSE : PRINT "ERROR # " PEEK(222)" IN LINE " PEEK(218) + PEEK(219) *256: NORMAL : END 
  283. 6720  POKE 216,0
  284. 6730  HOME : VTAB 2: HTAB 5: PRINT F$"-RPTIDX FILE NOT FOUND !!": HTAB 5: PRINT "SHOULD WE CONTINUE ? (Y / N) ";: GET AN$: PRINT AN$: IF AN$ = "Y"  THEN 6750
  285. 6740  PRINT  CHR$(7): PRINT : HTAB 5: PRINT "USER ENDED AT LINE 6740": END 
  286. 6750  GOSUB 6800:IP = 1: GOSUB 6950: GOTO 8270
  287. 6800  REM  ** OPEN RPTIDX
  288. 6810  PRINT D$"OPEN"F$"-RPTIDX,L17"
  289. 6820  RETURN 
  290. 6850  REM  ** READ RPTIDX POINTER
  291. 6860  PRINT D$"READ"F$"-RPTIDX,R0"
  292. 6870  INPUT IP
  293. 6880  PRINT D$: RETURN 
  294. 6900  REM  ** WRITE RPTIDX DATA
  295. 6910  PRINT D$"WRITE"F$"-RPTIDX,R"IP
  296. 6920  PRINT ID$
  297. 6930  PRINT D$: RETURN 
  298. 6950  REM  ** WRITE RPTIDX POINTER
  299. 6960  PRINT D$"WRITE"F$"-RPTIDX,R0"
  300. 6970  PRINT IP
  301. 6980  PRINT D$: RETURN 
  302. 7000  REM  **OPEN DATA FILE**
  303. 7010  PRINT D$"OPEN"F$"-DATA,L"LGH +N
  304. 7020  RETURN 
  305. 7100  REM  **READ POINTER**
  306. 7110  PRINT D$"READ"F$"-DATA,R0"
  307. 7120  INPUT PNT
  308. 7130  PRINT D$: RETURN 
  309. 7200  REM  **READ DATA**
  310. 7210  PRINT D$"READ"F$"-DATA,R"PNT
  311. 7220  FOR R = 1 TO N
  312. 7230  INPUT O$(R,S)
  313. 7240  NEXT 
  314. 7250  PRINT D$: RETURN 
  315. 7300  REM  **WRITE DATA**
  316. 7310  PRINT D$"WRITE"F$"-DATA,R"PNT
  317. 7320  FOR R = 1 TO N
  318. 7330  PRINT O$(R,S)
  319. 7340  NEXT 
  320. 7350  PRINT D$: RETURN 
  321. 7400  REM  **WRITE POINTER**
  322. 7410  PRINT D$"WRITE"F$"-DATA,R0"
  323. 7420 PNT = PNT +CHG
  324. 7430  PRINT PNT
  325. 7440  PRINT D$: RETURN 
  326. 7500  REM  **CLOSE FILES**
  327. 7510  PRINT D$"CLOSE"
  328. 7520  RETURN 
  329. 7600  REM  **READ BALANCE**
  330. 7610  PRINT D$"OPEN"F$"-BAL"
  331. 7620  PRINT D$"READ"F$"-BAL"
  332. 7630  INPUT OC: INPUT OD: INPUT PC: INPUT PD
  333. 7640  INPUT BB: INPUT CB: INPUT DN: INPUT CN
  334. 7650  GOSUB 7500
  335. 7660  RETURN 
  336. 7700  REM  **WRITE BALANCE**
  337. 7710  PRINT D$"OPEN"F$"-BAL"
  338. 7720  PRINT D$"WRITE"F$"-BAL"
  339. 7730  PRINT OC: PRINT OD: PRINT PC: PRINT PD
  340. 7740  PRINT BB: PRINT CB: PRINT DN: PRINT CN
  341. 7750  GOSUB 7500
  342. 7760  RETURN 
  343. 7800  REM  **READ INDEX**
  344. 7810 B% = PNT/239
  345. 7820  DIM I$(T%(0,0),B% +2): IF PNT <2  THEN  RETURN 
  346. 7825  PRINT D$"OPEN"F$"-IDX"
  347. 7830  PRINT D$"READ"F$"-IDX"
  348. 7840  FOR I = 1 TO T%(0,0): FOR J = 0 TO B%
  349. 7850  INPUT I$(I,J):A$ = I$(I,J)
  350. 7860  IF  ASC(A$) = 1  AND  LEN(A$) = 1  THEN I$(I,J) = " ": GOTO 7880
  351. 7870  IF  ASC(A$) = 1  THEN I$(I,J) = " " + RIGHT$(A$, LEN(A$) -1)
  352. 7880  NEXT : NEXT 
  353. 7890  GOSUB 7500: RETURN 
  354. 7900  REM  **WRITE INDEX**
  355. 7910  GOSUB 7000: GOSUB 7100:B% = PNT/239
  356. 7920  IF PNT <2  THEN 7990
  357. 7925  PRINT D$"OPEN"F$"-IDX"
  358. 7930  PRINT D$"WRITE"F$"-IDX"
  359. 7940  FOR I = 1 TO T%(0,0): FOR J = 0 TO B%
  360. 7950  IF  LEN(I$(I,J)) = 1  AND  ASC(I$(I,J)) = 32  THEN I$(I,J) =  CHR$(1): GOTO 7970
  361. 7960  IF  ASC(I$(I,J)) = 32  THEN I$(I,J) =  CHR$(1) + RIGHT$(I$(I,J), LEN(I$(I,J)) -1)
  362. 7970  PRINT I$(I,J)
  363. 7980  NEXT : NEXT 
  364. 7990  GOSUB 7500: RETURN 
  365. 8000  REM  **INITIALIZE**
  366. 8010  DATA 8,CHECK-NUM,X,13,4,4,1,0,0,PAY-TO,X,10,6,30,2,0,0,MO,N,6,8,2,0,0,0,DAY,N,17,8,2,0,0,0,AMOUNT,$,10,10,8,0,0,0,POSTED,X,30,10,1,3,0,0,MAJ-CD,X,10,12,1,0,0,0,MIN-CD,X,23,12,1,0,0,0,49,3
  367. 8020  READ N
  368. 8030  DIM N$(N),T$(N),T%(N,5),O$(N,1),S$(N)
  369. 8040  FOR I = 1 TO N
  370. 8050  READ N$(I): READ T$(I)
  371. 8060  FOR J = 0 TO 5
  372. 8070  READ T%(I,J)
  373. 8080  IF A <T%(I,2)  THEN A = T%(I,2)
  374. 8090  NEXT : NEXT 
  375. 8100  READ LGH: READ T%(0,0)
  376. 8110  ONERR  GOTO 6100
  377. 8120  PRINT D$"RENAME"F$"-DATA,"F$"-DATA"
  378. 8125  POKE 216,0
  379. 8130  GOSUB 7000: GOSUB 7100
  380. 8150  IF T%(0,0) = 0  THEN 8170
  381. 8155  ONERR  GOTO 6130
  382. 8160  GOSUB 7800
  383. 8170  FOR I = 1 TO A
  384. 8180 Z$ = Z$ +" ":P$ = P$ +"."
  385. 8190  NEXT 
  386. 8200 L$ =  CHR$(91):R$ =  CHR$(93)
  387. 8210  REM  *CHECK ADDITIONS*
  388. 8220  IF PNT >1  THEN  GOSUB 7600
  389. 8230  DEF  FN R(R) =  INT((R +.005) *100)/100
  390. 8240  REM  CHECK FOR RPTING INDEX FILE
  391. 8250  ONERR  GOTO 6700
  392. 8260  PRINT D$"UNLOCK "F$"-RPTIDX"
  393. 8270  POKE 216,0
  394. 9000  REM  *CHECKBOOK MENU*
  395. 9010  PRINT D$"CLOSE"
  396. 9020 PST = 0:T1 = 0:AC = 0
  397. 9030  HOME : HTAB 10: INVERSE : PRINT " CH.A.M.P ": NORMAL : PRINT "  CHECKBOOK ADV. MANAGEMENT PROGRAM": PRINT "      (INFORMER CHECK MODULE)": PRINT : PRINT : PRINT : PRINT "COPYRIGHT (C) 1980 BY MICRO-SPARC INC."
  398. 9035  PRINT : PRINT : INVERSE : PRINT "A(DD, C(HG, B(AL, P(OST, V(IEW, Q(UIT ";: GET AN$
  399. 9040 : PRINT AN$: PRINT 
  400. 9050  IF AN$ = "A"  THEN Z = 1: GOSUB 5620:M$ = "ADD": GOTO 200
  401. 9060  IF AN$ = "B"  THEN  GOTO 5700
  402. 9070  IF AN$ = "C"  THEN Z = 2:M$ = "CHANGE": GOTO 1000
  403. 9080  IF AN$ = "R"  THEN 4000
  404. 9090  IF AN$ = "P"  THEN Z = 2:PST = 1:A$ = "O":A = 6: GOSUB 7000: GOSUB 7100:X = PNT:M$ = "POST": GOTO 1180
  405. 9100  IF AN$ = "V"  THEN Z = 3:M$ = "VIEW": GOTO 1000
  406. 9110  IF AN$ = "Q"  THEN 9900
  407. 9120  GOTO 9030
  408. 9900  END